﻿Imports Testeitor.DAL
Imports System.Data.SqlClient
Imports Testeitor.Entidades

Public Class TestDAO
    Inherits DAOBase

    Public Overrides Function CargarEntidad(ByVal reader As System.Data.IDataReader, ByRef stack As Stack(Of Integer)) As Entidades.EntityBase
        Dim entidad As New TestEntity

        Dim temp As Object
        'Campo Id
        entidad.Id = Convert.ToInt32(reader("id"))
        'Resto de los campos
        temp = reader("titulo")
        If temp.Equals(DBNull.Value) Then
            entidad.Titulo = String.Empty
        Else
            entidad.Titulo = Convert.ToString(reader("titulo"))
        End If

        temp = reader("descripcion")
        If temp.Equals(DBNull.Value) Then
            entidad.Descripcion = String.Empty
        Else
            entidad.Descripcion = Convert.ToString(reader("descripcion"))
        End If

        temp = reader("fechaCreacion")
        If temp.Equals(DBNull.Value) Then
            entidad.FechaCreacion = Date.Today
        Else
            entidad.FechaCreacion = Convert.ToDateTime(reader("fechaCreacion"))
        End If

        temp = reader("autor_id")
        If temp.Equals(DBNull.Value) Then
            entidad.Autor = New UsuarioEntity
        Else
            Dim index As Integer
            index = Convert.ToInt32(reader("autor_id"))
            stack.Push(index)
        End If

        temp = reader("tester_id")
        If temp.Equals(DBNull.Value) Then
            entidad.Tester = New UsuarioEntity
        Else
            Dim index As Integer
            index = Convert.ToInt32(reader("tester_id"))
            stack.Push(index)
        End If

        temp = reader("prioridad")
        If temp.Equals(DBNull.Value) Then
            entidad.Prioridad = 0
        Else
            entidad.Prioridad = Convert.ToInt32(reader("prioridad"))
        End If

        temp = reader("estado_id")
        If temp.Equals(DBNull.Value) Then
            entidad.Estado = New EstadoEntity
        Else
            Dim index As Integer
            index = Convert.ToInt32(reader("estado_id"))
            stack.Push(index)
        End If

        temp = reader("pasos")
        If temp.Equals(DBNull.Value) Then
            entidad.Pasos = String.Empty
        Else
            entidad.Pasos = Convert.ToString(reader("pasos"))
        End If

        temp = reader("resultados_esperados")
        If temp.Equals(DBNull.Value) Then
            entidad.ResultadosEsperados = String.Empty
        Else
            entidad.ResultadosEsperados = Convert.ToString(reader("resultados_esperados"))
        End If

        temp = reader("casoDeUso_id")
        If temp.Equals(DBNull.Value) Then
            entidad.CasoDeUso = New CasoDeUsoEntity
        Else
            Dim index As Integer
            index = Convert.ToInt32(reader("casoDeUso_id"))
            stack.Push(index)
        End If

        CargarEntidad = entidad
    End Function

    Public Overrides Sub CargarRelacion(ByRef entidad As Entidades.EntityBase, ByRef stack As Stack(Of Integer))

        Dim tempDAO4 As New CasoDeUsoDAO
        Dim tempEntity4 As CasoDeUsoEntity
        tempEntity4 = tempDAO4.Seleccionar(stack.Pop)
        DirectCast(entidad, TestEntity).CasoDeUso = tempEntity4

        Dim tempDAO3 As New EstadoDAO
        Dim tempEntity3 As EstadoEntity
        tempEntity3 = tempDAO3.Seleccionar(stack.Pop)
        DirectCast(entidad, TestEntity).Estado = tempEntity3

        Dim tempDAO2 As New UsuarioDAO
        Dim tempEntity2 As UsuarioEntity
        tempEntity2 = tempDAO2.Seleccionar(stack.Pop)
        DirectCast(entidad, TestEntity).Tester = tempEntity2

        Dim tempDAO As New UsuarioDAO
        Dim tempEntity As UsuarioEntity
        tempEntity = tempDAO.Seleccionar(stack.Pop)
        DirectCast(entidad, TestEntity).Autor = tempEntity

    End Sub

    Public Overrides Function commandActualizar(ByRef ent As Entidades.EntityBase) As System.Data.SqlClient.SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("UPDATE CasoDeUso SET titulo = @titulo, descripcion = @descripcion, fechaCreacion = @fechaCreacion, " + _
        "autor_id = @autor_id, tester_id = @tester_id, prioridad = @prioridad, estado_id = @estado_id, pasos = @pasos, " + _
        "resultados_esperados = @resultados_esperados, casoDeUso_id = @casoDeUso_id WHERE id = @id")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@titulo", DirectCast(ent, TestEntity).Titulo))
        cmd.Parameters.Add(New SqlParameter("@descripcion", DirectCast(ent, TestEntity).Descripcion))
        cmd.Parameters.Add(New SqlParameter("@fechaCreacion", DirectCast(ent, TestEntity).FechaCreacion))
        cmd.Parameters.Add(New SqlParameter("@autor_id", DirectCast(ent, TestEntity).Autor.Id))
        cmd.Parameters.Add(New SqlParameter("@tester_id", DirectCast(ent, TestEntity).Tester.Id))
        cmd.Parameters.Add(New SqlParameter("@prioridad", DirectCast(ent, TestEntity).Prioridad))
        cmd.Parameters.Add(New SqlParameter("@estado_id", DirectCast(ent, TestEntity).Estado.Id))
        cmd.Parameters.Add(New SqlParameter("@pasos", DirectCast(ent, TestEntity).Pasos))
        cmd.Parameters.Add(New SqlParameter("@resultados_esperados", DirectCast(ent, TestEntity).ResultadosEsperados))
        cmd.Parameters.Add(New SqlParameter("@casoDeUso_id", DirectCast(ent, TestEntity).CasoDeUso))
        cmd.Parameters.Add(New SqlParameter("@id", ent.Id))

        commandActualizar = cmd
    End Function

    Public Overrides Function commandEliminar(ByVal id As Integer) As System.Data.SqlClient.SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("DELETE FROM CasoDeUso WHERE id = @id")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@id", id))

        commandEliminar = cmd
    End Function

    Public Overrides Function commandInsertar(ByRef ent As Entidades.EntityBase) As System.Data.SqlClient.SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("INSERT INTO CasoDeUso VALUES(@titulo, @descripcion, @fechaCreacion, @autor_id, @tester_id, " + _
        "@prioridad, @estado_id, @pasos, @resultados_esperados, @casoDeUso_id)")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@titulo", DirectCast(ent, TestEntity).Titulo))
        cmd.Parameters.Add(New SqlParameter("@descripcion", DirectCast(ent, TestEntity).Descripcion))
        cmd.Parameters.Add(New SqlParameter("@fechaCreacion", DirectCast(ent, TestEntity).FechaCreacion))
        cmd.Parameters.Add(New SqlParameter("@autor_id", DirectCast(ent, TestEntity).Autor.Id))
        cmd.Parameters.Add(New SqlParameter("@tester_id", DirectCast(ent, TestEntity).Tester.Id))
        cmd.Parameters.Add(New SqlParameter("@prioridad", DirectCast(ent, TestEntity).Prioridad))
        cmd.Parameters.Add(New SqlParameter("@estado_id", DirectCast(ent, TestEntity).Estado.Id))    
        cmd.Parameters.Add(New SqlParameter("@pasos", DirectCast(ent, TestEntity).Pasos))
        cmd.Parameters.Add(New SqlParameter("@resultados_esperados", DirectCast(ent, TestEntity).ResultadosEsperados))
        cmd.Parameters.Add(New SqlParameter("@casoDeUso_id", DirectCast(ent, TestEntity).CasoDeUso))

        commandInsertar = cmd
    End Function

    Public Overrides Function commandSeleccionar(ByVal id As Integer) As System.Data.SqlClient.SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("SELECT * FROM CasoDeUso WHERE id = @id")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@id", id))

        commandSeleccionar = cmd
    End Function

    Public Overrides Function commandSeleccionarWhere(ByVal where As String) As SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("SELECT * FROM Test WHERE " + where)
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@where", where))
        commandSeleccionarWhere = cmd
    End Function

    Public Overrides Function commandSeleccionarTodas() As System.Data.SqlClient.SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("SELECT * FROM CasoDeUso")

        commandSeleccionarTodas = cmd
    End Function
End Class
